home *** CD-ROM | disk | FTP | other *** search
- * guru.s
- * ぐるぐる / 最高速 = 3
- * by Mitsuky
-
-
- SPEED_MAX equ 3
-
- .offset 8 * 引き数
- _source_ptr: .ds.l 1
- _dest_ptr: .ds.l 1
- _speed: .ds.l 1
- _vdisp: .ds.l 1
-
-
-
- .text
- .even
-
- .dc.b 'WL10',$0d,$0a
- .dc.b 'ぐるぐる / 最高速 = 3',$0d,$0a
- .dc.b ' by Mitsuky',$0d,$0a
- .dc.b $1a
- .even
-
- guru:
- link a6,#0
- movem.l d1-d7/a0-a5,-(sp)
-
- move.l _speed(a6),d0
- bmi guru_ask_speed
- cmpi.l #SPEED_MAX,d0
- bhi guru_err
-
- tst.l _vdisp(a6)
- bmi guru_ask_vdisp
-
-
-
- moveq.l #SPEED_MAX,d6
- sub.w d0,d6 * d6.w = vdisp 待ち回数-1
-
- movea.l _source_ptr(a6),a2 * a2.l = 転送元アドレス
- movea.l _dest_ptr(a6),a3 * a3.l = 転送先アドレス
- lea.l table(pc),a4
-
- moveq.l #64-1,d7 * d7.w = ループ回数-1
- guru_loop:
-
- move.w d6,d0
- @@: bsr vdisp
- dbra d0,@b
-
- movea.l a2,a0
- movea.l a3,a1
-
- movem.l a2-a4,-(sp)
-
- moveq.l #64-1,d5
- guru_loop_y:
- movem.l (a0)+,d0-d4/a2-a4
- movem.l d0-d4/a2-a4,(a1)
- movem.l (a0)+,d0-d4/a2-a4
- movem.l d0-d4/a2-a4,32*1(a1)
- movem.l (a0)+,d0-d4/a2-a4
- movem.l d0-d4/a2-a4,32*2(a1)
- movem.l (a0)+,d0-d4/a2-a4
- movem.l d0-d4/a2-a4,32*3(a1)
-
- lea.l (512-64)*2(a0),a0
- lea.l 512*2(a1),a1
-
- dbra d5,guru_loop_y
-
- movem.l (sp)+,a2-a4
-
- move.l (a4)+,d0
- adda.l d0,a2
- adda.l d0,a3
- dbra d7,guru_loop
-
- moveq.l #0,d0
- guru_rts:
- movem.l (sp)+,d1-d7/a0-a5
- unlk a6
- rts
-
-
- **** ****
- vdisp:
- movem.l a0,-(sp)
- move.l _vdisp(a6),a0
- jsr (a0)
- movem.l (sp)+,a0
- rts
-
-
- **** ****
- guru_err:
- moveq.l #-1,d0
- bra guru_rts
-
-
- **** ****
- guru_ask_speed:
- moveq.l #SPEED_MAX,d0
- bra guru_rts
-
-
- **** ****
- guru_ask_vdisp:
- move.l _speed(a6),d0
- lea.l ask_vdisp_table(pc),a0
- add.w d0,d0
- move.w (a0,d0.w),d0
- bra guru_rts
-
- ask_vdisp_table:
- .dc.w 256,192,128,64
-
-
- *********************************************************
- table:
- .dcb.l 7,64*2
- .dcb.l 7,512*2*64
- .dcb.l 7,-64*2
- .dcb.l 6,-512*2*64
- .dcb.l 6,64*2
- .dcb.l 5,512*2*64
- .dcb.l 5,-64*2
- .dcb.l 4,-512*2*64
- .dcb.l 4,64*2
- .dcb.l 3,512*2*64
- .dcb.l 3,-64*2
- .dcb.l 2,-512*2*64
- .dcb.l 2,64*2
- .dcb.l 1,512*2*64
- .dcb.l 1,-64*2
-